/// 在 Flutter 中实现 Socket 回调后通知其他界面刷新，可以通过以下 ​6 种专业方案实现，根据项目复杂度选择最适合的方式：
///
/**
 *
 * 一、全局状态管理方案（推荐）
    使用 使用 Riverpod + StateNotifier

    优势：
    自动处理依赖关系
    精确控制刷新范围
    支持跨页面/组件通信
 * */
// // 1. 创建全局状态管理类
// final socketProvider = StateNotifierProvider<SocketNotifier, List<Message>>((ref) => SocketNotifier());
//
// class SocketNotifier extends StateNotifier<List<Message>> {
//   SocketNotifier() : super([]) {
//     _initSocket();
//   }
//
//   void _initSocket() {
//     final socket = IO.io('http://your-socket-server', <String, dynamic>{});
//     socket.on('newMessage', (data) {
//       state = [...state, Message.fromJson(data)]; // 触发全局刷新
//     });
//   }
// }
//
// // 2. 在任意界面监听
// class ChatList extends ConsumerWidget {
//   @override
//   Widget build(BuildContext context, WidgetRef ref) {
//     final messages = ref.watch(socketProvider);
//     return ListView.builder(
//       itemCount: messages.length,
//       itemBuilder: (_, i) => Text(messages[i].content),
//     );
//   }
// }


/**
 * 二、事件总线方案
    使用 event_bus 库
 */

// // 1. 初始化总线
// final eventBus = EventBus();
//
// // 2. 定义事件模型
// class MessageEvent {
//   final Message message;
//   MessageEvent(this.message);
// }
//
// // 3. Socket 回调触发事件
// socket.on('message', (data) {
// eventBus.fire(MessageEvent(Message.fromJson(data)));
// });
//
// // 4. 界面监听（需处理订阅取消）
// class MessagePage extends StatefulWidget {
// @override
// _MessagePageState createState() => _MessagePageState();
// }
//
// class _MessagePageState extends State<MessagePage> {
// late StreamSubscription _subscription;
// List<Message> messages = [];
//
// @override
// void initState() {
// super.initState();
// _subscription = eventBus.on<MessageEvent>().listen((event) {
// setState(() => messages.add(event.message));
// });
// }
//
// @override
// void dispose() {
// _subscription.cancel();
// super.dispose();
// }
// }

/**
 * 三、Stream 方案（轻量级实现）
 * */
// // 1. 创建 StreamController
// final StreamController<Message> _messageController = StreamController.broadcast();
//
// // 2. Socket 回调添加数据
// socket.on('message', (data) {
// _messageController.add(Message.fromJson(data));
// });
//
// // 3. 界面使用 StreamBuilder
// StreamBuilder<Message>(
// stream: _messageController.stream,
// builder: (context, snapshot) {
// if (snapshot.hasData) {
// return Text(snapshot.data!.content);
// }
// return CircularProgressIndicator();
// },
// )

/**
 *四、BLoC 架构方案
 *
 * */

// // 1. 创建 BLoC
// class SocketBloc extends Bloc<SocketEvent, SocketState> {
//   final Socket socket;
//
//   SocketBloc(this.socket) : super(SocketInitial()) {
//     on<SocketMessageReceived>((event, emit) {
//       emit(SocketDataLoaded(event.message));
//     });
//
//     socket.on('message', (data) {
//       add(SocketMessageReceived(Message.fromJson(data)));
//     });
//   }
// }
//
// // 2. 界面使用 BlocBuilder
// BlocBuilder<SocketBloc, SocketState>(
// builder: (context, state) {
// if (state is SocketDataLoaded) {
// return Text(state.message.content);
// }
// return LoadingWidget();
// },
// )


/**
 * 五、GetX 状态管理
 * */
// // 1. 创建 Controller
// class SocketController extends GetxController {
//   final RxList<Message> messages = <Message>[].obs;
//
//   void initSocket() {
//     final socket = IO.io('http://your-server', <String, dynamic>{});
//     socket.on('message', (data) {
//       messages.add(Message.fromJson(data)); // 自动触发刷新
//     });
//   }
// }
//
// // 2. 在界面中使用
// class MessageView extends StatelessWidget {
//   final SocketController c = Get.put(SocketController());
//
//   @override
//   Widget build(BuildContext context) {
//     return Obx(() => ListView(
//       children: c.messages.map((m) => Text(m.content)).toList(),
//     ));
//   }
// }

/**
 * 六、Redux 方案（企业级应用）
 * */
// 1. 定义 Action
// class AddMessageAction {
//   final Message message;
//   AddMessageAction(this.message);
// }
//
// // 2. Reducer 处理
// AppState appReducer(AppState state, dynamic action) {
//   if (action is AddMessageAction) {
//     return state.copyWith(messages: [...state.messages, action.message]);
//   }
//   return state;
// }
//
// // 3. Socket 回调触发 Action
// socket.on('message', (data) {
// store.dispatch(AddMessageAction(Message.fromJson(data)));
// });
//
// // 4. 界面连接 Store
// StoreConnector<AppState, List<Message>>(
// converter: (store) => store.state.messages,
// builder: (context, messages) => ListView.builder(
// itemCount: messages.length,
// itemBuilder: (_, i) => Text(messages[i].content),
// ),
// )

